﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/

using System;
using System.Windows.Threading;
using Xceed.Silverlight.Data;

namespace Xceed.Silverlight.ListBox
{
  internal static class DataSourceHelper
  {
    internal static DataSourceWrapper GenerateDataSourceForObject( object newItemsSource, Dispatcher dispatcher )
    {
      if( newItemsSource == null )
        return null;

      DataSourceWrapper dataSource = null;
      DataSourceProvider dataSourceProvider = null;

      newItemsSource = DataSourceWrapper.ConvertIfNeeded( newItemsSource );

      // A data source is available.
      if( newItemsSource is DataSourceWrapper )
      {
        dataSource = ( DataSourceWrapper )newItemsSource;
        dataSourceProvider = dataSource.Provider;
      }
      else
      {
        DataSourceProviderFactory factory = new DataSourceProviderFactory();
        dataSourceProvider = factory.Create( newItemsSource );
      }

      // Make sure we haven't met an unknown data source.
      if( dataSourceProvider == null )
        throw new InvalidOperationException( "An attempt was made to use a data source that is not supported." );

      return ( dataSource != null )
               ? dataSource
               : new DataSourceWrapper( dispatcher, dataSourceProvider );
    }
  }
}
